package com.ipartek.pruebas.capitulo10;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.util.StringTokenizer;

import com.ipartek.pruebas.bean.Alumno;
import com.ipartek.pruebas.enumeraciones.Rol;

public class MigracionP5 {
	static String direccionfichero = "C:\\Desarrollo\\workspace\\javase6Google\\data\\Alumnos.txt";

	static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
	// NO ME HA HECHO FALTA, PERO ES BUENO SABER QUE SI ME DARIA FALLOS SERIA
	// NECESARIO
	static final String BBDD_NAME = "jdbc:odbc:pruebas";
	static final String BBDD_USER = "";
	static final String BBDD_PASS = "";

	static final String TABLE_ALUMNOS = "Alumnos";
	static final String FIELD_ALUMNOS_NOMBRE = "NOMBRE";
	static final String FIELD_TABLE_ALUMNOS_APELLIDO1 = "APELLIDO1";
	static final String FIELD_TABLE_ALUMNOS_APELLIDO2 = "APELLIDO2";
	static final String FIELD_TABLE_ALUMNOS_EDAD = "EDAD";
	static final String FIELD_TABLE_ALUMNOS_EMAIL = "EMAIL";
	static final String FIELD_TABLE_ALUMNOS_DNI = "DNI";
	static final String FIELD_TABLE_ROL = "ROL";
	static final String FIELD_TABLE_FECHA_ALTA = "FECHA_ALTA";

	static final String RUTA_ACCESS = "c:\\archiv~1\\Micros~2\\Office12\\msaccess.exe";
	static final String RUTA_BASE = "C:\\Desarrollo\\workspace\\javase6Google\\data\\PruebaCurso.mdb";
	static FileReader fileRA = null;
	static BufferedReader br = null;
	/**
	 * @param args
	 */
	static int num;
	static String tempo;

	public static void main(String[] args) throws SQLException, IOException {

		String date;
		Date fecha = new Date();
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
		date = formatter.format(fecha);
		Connection conn = null;
		Statement stmt = null;

		System.out.println("Inicio de la ejecucion: " + date);


		System.out.println("Inicio de la ejecucion: " + fecha);

		try {
			Alumno alumnoTemp = new Alumno();
			ArrayList<Alumno> alumno1 = new ArrayList<Alumno>();
			fileRA = new FileReader(direccionfichero);//
			br = new BufferedReader(fileRA);
			String linea;

			int k = 0;
			while ((linea = br.readLine()) != null)// Hasta que no haya nada
			{
				StringTokenizer st = new StringTokenizer(linea, ",");
				alumnoTemp.setNombre(st.nextToken());
				alumnoTemp.setApellido1(st.nextToken());
				alumnoTemp.setApellido2(st.nextToken());
				tempo = st.nextToken();
				int i = 0;
				i = Integer.parseInt(tempo);
				alumnoTemp.setEdad(i);
				alumnoTemp.setEmail(st.nextToken());
				alumnoTemp.setDni(st.nextToken());

				tempo = st.nextToken();
				if (tempo.equals("TRABAJADOR")) {
					alumnoTemp.setRol(Rol.TRABAJADOR);
				} else {
					if (tempo.equals("JEFE")) {
						alumnoTemp.setRol(Rol.JEFE);
					} else {
						alumnoTemp.setRol(Rol.CLIENTE);
					}
				}
				// System.out.println(alumnoTemp.toString());
				alumno1.add(new Alumno());
				alumno1.get(k).setNombre(alumnoTemp.getNombre());
				alumno1.get(k).setApellido1(alumnoTemp.getApellido1());
				alumno1.get(k).setApellido2(alumnoTemp.getApellido2());
				alumno1.get(k).setEdad(alumnoTemp.getEdad());
				alumno1.get(k).setEmail(alumnoTemp.getEmail());
				alumno1.get(k).setDni(alumnoTemp.getDni());
				alumno1.get(k).setRol(alumnoTemp.getRol());
				k++;
			}
			/*
			 * para prueba for (k = 0; k < alumno1.size(); k++) {
			 * System.out.println(alumno1.get(k).getNombre() + " " +
			 * alumno1.get(k).getApellido1() + " " +
			 * alumno1.get(k).getApellido2() + " " + alumno1.get(k).getEdad() +
			 * " " + alumno1.get(k).getEmail() + " " + alumno1.get(k).getDni() +
			 * " " + alumno1.get(k).getRol()); }
			 */
			br.close();
			fileRA.close();
			// base de datos

			try {
				conn = DriverManager.getConnection(BBDD_NAME, BBDD_USER,
						BBDD_PASS);

				stmt = conn.createStatement();
			} catch (SQLException e) {
				System.out.println("No conecta la base de datos");
			}
			// voy a meter datos

			String sqlSelect = "";
			sqlSelect = "DELETE * from " + TABLE_ALUMNOS + ";";
			stmt.execute(sqlSelect);
			stmt.close();
			conn.close();
			String ruta = RUTA_ACCESS + " " + RUTA_BASE + " //compact";
			Runtime rt = Runtime.getRuntime();
			try {
				@SuppressWarnings("unused")
				Process proc = rt.exec(ruta);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("pulsa enter para continuar...");
			Scanner teclado = new Scanner(System.in);
			@SuppressWarnings("unused")
			String tecla = teclado.nextLine();
			System.out.println("Copiando datos");
			conn = null;
			stmt = null;
			try {
				conn = DriverManager.getConnection(BBDD_NAME, BBDD_USER,
						BBDD_PASS);

				stmt = conn.createStatement();
			} catch (SQLException e) {
				System.out.println("No conecta la base de datos");
			}
			sqlSelect = "";
			int rol1 = 0;
			num = 0;
			for (k = 0; k < alumno1.size(); k++) {
				if (alumno1.get(k).getRol() == Rol.TRABAJADOR) {
					rol1 = 0;
				} else {
					if (alumno1.get(k).getRol() == Rol.CLIENTE) {
						rol1 = 1;
					} else {
						rol1 = 2;
					}
				}

				sqlSelect = "insert into Alumnos ("+FIELD_TABLE_ALUMNOS_DNI
						+","+FIELD_ALUMNOS_NOMBRE+","
						+FIELD_TABLE_ALUMNOS_APELLIDO1+","
						+FIELD_TABLE_ALUMNOS_APELLIDO2+","
						+FIELD_TABLE_ALUMNOS_EDAD+","
						+FIELD_TABLE_ROL+","
						+FIELD_TABLE_ALUMNOS_EMAIL+","
						+FIELD_TABLE_FECHA_ALTA+") values("
						+ "'"+ alumno1.get(k).getDni()+"'"
						+ ","
						+ "'"+ alumno1.get(k).getNombre()+"'"
						+ ","
						+ "'"+alumno1.get(k).getApellido1()+"'"
						+ ","
						+ "'"+alumno1.get(k).getApellido2()+"'"
						+ ","
						+ alumno1.get(k).getEdad()
						+ ","
						//+ alumno1.get(k).getRol()
						+rol1
						+ ","
						+ "'"+alumno1.get(k).getEmail() +"'"
						+","
						+"NOW"
						+ ");";
				//System.out.println(sqlSelect); para prueba

				//System.out.println(sqlSelect);
				// System.out.println(sqlSelect); para prueba

				stmt.executeUpdate(sqlSelect);
				num++;
			}

			alumno1 = null;
		} catch (Exception e) {
			System.out.println(e);
			System.out.println("Error de DB");
		} finally {
			Date fecha1 = new Date();
			int i1 = fecha1.compareTo(fecha);
			System.out.println("Ejecucion completada: " + fecha1 + " " + i1);
			System.out.println("Registros subidos: " + num);
			stmt.close();
			conn.close();
			br.close();
			fileRA.close();
		}
	}

}
